package com.jasmine.core.config.redis;//package com.jasmine.bjstkserver.core.config.redis;
//
//import org.redisson.api.RLock;
//import org.redisson.api.RedissonClient;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.concurrent.TimeUnit;
//
///**
// * @author jasmineXz
// */
//@Component
//public class RedissonDistributedLocker implements DistributedLocker {
//
//    @Autowired
//    private RedissonClient redissonClient;
//
//    /**
//     * lock(), 拿不到lock就不罢休，不然线程就一直block
//     */
//    @Override
//    public RLock lock(String lockKey) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.lock();
//        return lock;
//    }
//
//    /**
//     * leaseTime为加锁时间，单位为秒
//     */
//    @Override
//    public RLock lock(String lockKey, long leaseTime) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.lock(leaseTime, TimeUnit.SECONDS);
//        return null;
//    }
//
//    /**
//     * timeout为加锁时间，时间单位由unit确定
//     * @param lockKey 加锁时间
//     * @param unit 时间类型
//     * @param timeout 超时时间
//     * @return 锁实例
//     */
//    @Override
//    public RLock lock(String lockKey, TimeUnit unit, long timeout) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.lock(timeout, unit);
//        return lock;
//    }
//
//    /**
//     * 尝试加锁
//     * @param lockKey 锁key
//     * @param unit 时间类型
//     * @param waitTime 等待时间
//     * @param leaseTime 加锁时间
//     * @return 加锁结果: true:成功  false:失败
//     */
//    @Override
//    public boolean tryLock(String lockKey, TimeUnit unit, long waitTime, long leaseTime) {
//        RLock lock = redissonClient.getLock(lockKey);
//        try {
//            return lock.tryLock(waitTime, leaseTime, unit);
//        } catch (InterruptedException e) {
//            return false;
//        }
//    }
//
//    /**
//     * 释放锁
//     * @param lockKey 锁key
//     */
//    @Override
//    public void unlock(String lockKey) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.unlock();
//    }
//
//    /**
//     * 释放锁
//     * @param lock 锁实例
//     */
//    @Override
//    public void unlock(RLock lock) {
//        lock.unlock();
//    }
//
//}
